//
//  CZTabBar.swift
//  WeiBo
//
//  Created by Apple on 16/9/4.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit

//  代理 需要继承NSObjectProtocol，要不然不能使用weak关键字，不能弱引用代理对象，不能防止循环引用
protocol CZTabBarDelegate: NSObjectProtocol {
    //  点击撰写按钮
    func didSelectedComposeButton()
}

//  自定义tabbar
class CZTabBar: UITabBar {

    //  点击加号执行的闭包
    var composeButtonClosure: (()->())?
    
    //  定义代理
    weak var czTabBarDelegate: CZTabBarDelegate?
    
    // MARK:    -懒加载控件
    fileprivate lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        //  设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        //  设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
        //  设置图片大小
        button.sizeToFit()
        
        
        return button
    }()
    //  手写代码
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    //  当使用xib或者storyboard加载当前视图的时候会调用该方法，表示提示我们没有支持xib/storyboard
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //  添加控件设置约束
    fileprivate func setupUI() {
        
        // push 黑色效果，设置背景图片
        backgroundImage = UIImage(named: "tabbar_background")
        addSubview(composeButton)
        
        
    }
    
    // MARK:    --点击撰写按钮的事件
    //  使用private关键修饰的函数，在运行循环中是找不到的，因为swift是编译型语音，在编译的时候就需要知道调用那个函数，使用@objc表示我们使用oc的机制，基于动态运行机制向对象派发消息
    @objc fileprivate func composeButtonAction() {
        //  执行闭包
        composeButtonClosure?()
        //  执行代理
        czTabBarDelegate?.didSelectedComposeButton()
    }
    
    //  调整子控件布局
    override func layoutSubviews() {
        super.layoutSubviews()
        //  按钮的中心x点为当前视图宽度的一半
        composeButton.centerX = width / 2
        //  按钮的中心y点为当前视图高度的一半
        composeButton.centerY = height / 2
        
        //  设置系统按钮的宽度
        let itemWidth = width / 5
        
        
        //  调整系统控件的宽度和位置
        //  记录当前遍历的系统按钮
        var index: Int = 0
        for value in subviews {
            
            //  iskindofclass 改成了 iskind 在swift 3.0
            if value.isKind(of: NSClassFromString("UITabBarButton")!) {
                //  设置系统按钮的宽度
                value.width = itemWidth
                //  设置系统按钮的frame的x坐标
                value.x = CGFloat(index) * itemWidth
                //  当前遍历的系统索引+1
                index += 1
                
                //  如果当前索引等于2 表示发现按钮，让其多加一个宽度，显示在加号按钮的后面
                if index == 2 {
                    index += 1
                }
            }
            
        }
        
        
        
    }
    
    
    
    
    
   
}
